import {
	IParam,
	IUIActionResult,
	IActionModel,
	IContext,
	IAbility,
	IHttpResponse,
	deepCopy,
	IViewAbility,
	srfpluralize,
	hasFunction,
	formatUrlString,
    IRedirectInput,
    transformDoData
} from '@/core';
import { Http } from '@/http';
import { EntityUIServiceBase } from '../entity-ui-service-base';

/**
 * avue示例实体01UI服务对象基类
 * 基于template/src/ui-service/{{appEntities}}/{{appEntities}}-ui-service-base.ts.hbs生成
 *
 * @export
 * @class AvueChildOneUIServiceBase
 * @extends {UIService}
 */
export class AvueChildOneUIServiceBase extends EntityUIServiceBase {

	/**
   * Creates an instance of AvueChildOneUIServiceBase
   * 
   * @param {*} [opts={}]
   * @memberof AvueChildOneUIServiceBase
   */
  constructor(opts: IParam = {}) {
    super(opts);
    this.appDeKeyFieldName = 'avuechildoneid';
		// 是否启用主状态
		this.isEnableDEMainState = false;
  	}


  /**
    * 获取指定数据的重定向页面
    * 
    * @param context 应用上下文 
    * @param viewParams 视图参数
    * @param data 业务数据
    * @param redirectParam 重定向视图输入参数
	* @memberof AvueChildOneUIServiceBase
    */
    public async getAppRDView(
        context: IContext,
		viewParams: IParam,
		data: IParam,
		redirectParam: IRedirectInput
    ){
        // 进行数据查询
        const service = await App.getDataService("AvueChildOne", context);
        const tempContext: IContext = deepCopy(context);
        const key: string = 'avuechildone';
        let srfkey: string | null = null;
        if (data && data.hasOwnProperty(key)) {
            srfkey = data[key];
        } else if (context && context[key]) {
            srfkey = context[key];
        } else if (viewParams && viewParams[key]) {
            srfkey = viewParams[key];
        }
        Object.assign(tempContext, { [key]: srfkey });
        let result: any;
        if (redirectParam.redirectAction && service[redirectParam.redirectAction] && service[redirectParam.redirectAction] instanceof Function) {
            result = await service[redirectParam.redirectAction](tempContext, data);
        } else {
            result = await service.Get(tempContext, data);
        }
        const curData:any = result.data;
        // 判断当前数据模式,默认为true,todo
        const iRealDEModel:boolean = true;
        let bDataInWF: boolean = false;
		let bWFMode:any = false;
		if (redirectParam.isEnableWorkflow) {
            return this.getWFView();
        } else {
            if (viewParams && viewParams.srfwf && this.InWorkflowArray.indexOf(viewParams.srfwf) !== -1) {
                return this.getWFView();
            }
        }
        let strPDTViewParam: string = await this.getDESDDEViewPDTParam(curData, bDataInWF, bWFMode);
        return this.allViewMap.get(strPDTViewParam);
    }

	/**
	 * 获取实体单数据实体视图预定义参数
	 *
	 * @param curData 当前数据
	 * @param bDataInWF 是否有数据在工作流中
	 * @param bWFMode   是否工作流模式
	 * @memberof AvueChildOneUIServiceBase
	 */
	public async getDESDDEViewPDTParam(
		curData: any,
		bDataInWF: boolean,
		bWFMode: boolean
	) {
		let strPDTParam: string = '';
		if (bDataInWF) {
			// TODO 判断数据是否在流程中
		}
		// TODO 多表单
		const multiFormDEField: string | null = null;

		const isApp = App.getProjectSetting().isApp;
		if (multiFormDEField) {
			const objFormValue: string = curData[multiFormDEField];
			if (isApp) {
				return 'MOBEDITVIEW:' + objFormValue;
			}
			return 'EDITVIEW:' + objFormValue;
		}
		if (isApp) {
			if (this.getDEMainStateTag(curData)) {
				return `MOBEDITVIEW:MSTAG:${this.getDEMainStateTag(curData)}`;
			}
			return 'MOBEDITVIEW:';
		}
		if (this.getDEMainStateTag(curData)) {
			return `EDITVIEW:MSTAG:${this.getDEMainStateTag(curData)}`;
		}
		return 'EDITVIEW:';
	}

}